package client.coordinador;

import static org.stjs.javascript.JSCollections.$array;

import org.stjs.javascript.Array;

import client.common.EndPoints.CoordinadorEP;
import client.common.Models.Acudiente;
import client.common.Models.Curso;
import client.common.Models.Estudiante;
import client.common.Models.Persona;
import client.common.angular.NgScope;
import client.common.directives.EPChanging;
import client.common.directives.EPLoading;
import client.common.directives.EPModal;
import client.common.javascript.JsProcedure0;
import client.common.javascript.JsProcedure1;
import client.common.javascript.JsWindow;

@SuppressWarnings("unused")
public class AdminEstudiantesScope extends NgScope {

	private Persona nuevaPersona;
	private Persona nuevoAcudiente;
	private Array<Estudiante> resultados;
	private EPChanging epChanging;
	private String search;
	private CoordinadorEP Coordinador;
	private Estudiante nuevoEstudiante;
	private EPLoading epLoading;
	private EPModal epModal;
	private Array<Curso> cursos;

	public AdminEstudiantesScope(CoordinadorEP Coordinador, EPModal epModal,
			EPLoading epLoading, EPChanging epChanging, JsWindow $window) {
		super("AdminEstudiantesScope");
		this.nuevaPersona = new Persona();
		this.nuevoAcudiente = new Persona();
		this.resultados = Coordinador.getEstudiantes("Koot");
		this.cursos = Coordinador.getCursosGrado(-1l);

		this.epChanging = epChanging;
		this.epLoading = epLoading;
		this.epModal = epModal;
		this.Coordinador = Coordinador;

	}

	public void filter() {
		final AdminEstudiantesScope that = this;
		epChanging.$invoke(this, 500, new JsProcedure0() {
			public void $invoke() {
				if (that.search.length() > 0)
					that.resultados = that.Coordinador
							.getEstudiantes(that.search);
			}
		});

	}

	public void crearEstudiante() {

		this.nuevoEstudiante = new Estudiante();
		this.nuevoEstudiante.persona = this.nuevaPersona;
		this.nuevoEstudiante.idColegio = 1l;
		this.nuevoEstudiante.idGrado = 1l;
		this.nuevoEstudiante.acudiente = new Acudiente();
		this.nuevoEstudiante.acudiente.persona = this.nuevoAcudiente;
		final AdminEstudiantesScope that = this;
		epLoading.$invoke(Coordinador.newEstudiante(this.nuevoEstudiante,
				new JsProcedure1<Estudiante>() {
					public void $invoke(Estudiante estudiante) {
						that.resultados = $array(estudiante);
						that.search = estudiante.persona.nombres + " "
								+ estudiante.persona.apellidos;
						that.nuevaPersona = new Persona();
						that.nuevoAcudiente = new Persona();
						that.epModal.close("nuevo-estudiante");
						that.mostrarMatricula(estudiante);
					}
				}), "[modal-id='nuevo-estudiante'] button.btn-aceptar");

	}

	public void mostrarEstudiante(Estudiante estu) {
		$broadcast("$showEstudiante", estu);
	}

	public void mostrarMatricula(Estudiante estu) {
		$broadcast("$showMatricula", estu);
	}

	public void notifySomething() {
		epModal.notify("Ohh yeah!!", "error");
	}

	public void cargarArchivoEstudiantes() {
		// TODO
		// $scope.uploadFile = function() {
		// var fd = new FormData();
		// fd.append('file', $scope.archivoEstudiantes);
		// $http.post("/api/coordinador/cargarArchivoEstudiantes", fd, {
		// transformRequest : angular.identity,
		// headers : {
		// 'Content-Type' : undefined
		// }
		// });
		// }
	}

	public static Array<String> $inject() {
		return $array("Coordinador", "epModal", "epLoading", "epChanging",
				"$window", "ColegioInfo");
	}

}
